package br.unicamp.ic.inf300.arena.modelo.vendas;
/**
 * Venda de Bilhetes Eletronicos para Espetaculos (Arena Entretenimento S.A.)
 * Venda.java
 */
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

public class Venda {

	private long numProtocolo;

	private Date dataHora;

	private Pagamento pagamento;

	private Collection<Bilhete> bilhetes;

	//--
	public Venda() {
		bilhetes = new ArrayList<Bilhete>();
		pagamento = new CartaoCredito();
	}

	/**
	 * 
	 * @param numProtocolo
	 * @param dataHora
	 * @param pagamento
	 * @param bilhetes
	 */
	public Venda(long numProtocolo, Date dataHora, Pagamento pagto,
			Collection<Bilhete> bilhetes) throws Exception {
		super();
		
		this.numProtocolo = numProtocolo;
		this.dataHora = dataHora;
		this.pagamento = pagto;
		this.bilhetes = bilhetes;
	}

	public Collection<Bilhete> getBilhetes() {
		return this.bilhetes;
	}
	public void setBilhetes(Collection<Bilhete> bilhetes) {
		this.bilhetes = bilhetes;
	}

	public Pagamento getPagamento() {
		return this.pagamento;
	}
	public void setPagamento(Pagamento pagto) {
		this.pagamento = pagto;
	}	

	public Date getDataHora() {
		return dataHora;
	}
	public void setDataHora(Date dataHora) {
		this.dataHora = dataHora;
	}

	public long getNumProtocolo() {
		return numProtocolo;
	}
	public void setNumProtocolo(long numProtocolo) {
		this.numProtocolo = numProtocolo;
	}

	/**
	 * @return <code>String</code>
	 * JUtils plugin ;-)
	 */
	public String toString()
	{
	    final String TAB = "    ";

	    StringBuffer retValue = new StringBuffer();

	    retValue.append("Venda ( ")
	        .append(super.toString()).append(TAB)
	        .append("bilhetes = ").append(this.bilhetes).append(TAB)
	        .append("dataHora = ").append(this.dataHora).append(TAB)
	        .append("numProtocolo = ").append(this.numProtocolo).append(TAB)
	        .append("pagamento = ").append(this.pagamento).append(TAB)
	        .append(" )");

	    return retValue.toString();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((bilhetes == null) ? 0 : bilhetes.hashCode());
		result = prime * result
				+ ((dataHora == null) ? 0 : dataHora.hashCode());
		result = prime * result + (int) (numProtocolo ^ (numProtocolo >>> 32));
		result = prime * result
				+ ((pagamento == null) ? 0 : pagamento.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Venda other = (Venda) obj;
		if (numProtocolo != other.numProtocolo)
			return false;
		if (dataHora == null) {
			if (other.dataHora != null)
				return false;
		} else if (!dataHora.equals(other.dataHora))
			return false;
		if (bilhetes == null) {
			if (other.bilhetes != null)
				return false;
		} else if (!bilhetes.equals(other.bilhetes))
			return false;
		if (pagamento == null) {
			if (other.pagamento != null)
				return false;
		} else if (!pagamento.equals(other.pagamento))
			return false;
		return true;
	}
}